﻿//IMarketRuleContainer.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Algo
{
	using System;

	using StockSharp.Logging;

	/// <summary>
	/// Контейнер правил.
	/// </summary>
	public interface IMarketRuleContainer : ILogReceiver
	{
		/// <summary>
		/// Состояние работы.
		/// </summary>
		ProcessStates ProcessState { get; }

		/// <summary>
		/// Активировать правило.
		/// </summary>
		/// <param name="rule">Правило.</param>
		/// <param name="process">Обработчик, возвращающий true, если правило закончило свою работу, иначе - false.</param>
		void ActivateRule(IMarketRule rule, Func<bool> process);

		/// <summary>
		/// Приостановлено ли исполнение правил.
		/// </summary>
		/// <remarks>
		/// Приостановка правил происходит через метод <see cref="SuspendRules()"/>.
		/// </remarks>
		bool IsRulesSuspended { get; }

		/// <summary>
		/// Приостановить исполнение правил до следующего восстановления через метод <see cref="ResumeRules"/>.
		/// </summary>
		void SuspendRules();

		/// <summary>
		/// Восстановить исполнение правил, остановленное через метод <see cref="SuspendRules()"/>.
		/// </summary>
		void ResumeRules();

		/// <summary>
		/// Зарегистрированные правила.
		/// </summary>
		IMarketRuleList Rules { get; }
	}
}